{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 36,
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "from sklearn.preprocessing import MinMaxScaler\n",
    "from keras.models import Sequential\n",
    "from keras.layers import LSTM, Dense"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "花菜类未打折\n"
     ]
    }
   ],
   "source": [
    "# 加载数据\n",
    "# 读取Excel文件\n",
    "data = pd.read_excel('t1.xlsx')\n",
    "index = 0\n",
    "series = data.iloc[:,index].values  # 替换为你的时间序列变量名称\n",
    "# 获取列名列表\n",
    "column_names = data.columns.tolist()"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "outputs": [
    {
     "data": {
      "text/plain": "<Figure size 432x288 with 1 Axes>",
      "image/png": "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\n"
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 可视化预测结果\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "rag = range(len(series))\n",
    "plt.plot(rag, series, label='Train Predict')\n",
    "plt.show()"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "outputs": [],
   "source": [
    "# 数据预处理\n",
    "scaler = MinMaxScaler(feature_range=(0, 1))\n",
    "scaled_data = scaler.fit_transform(series.reshape(-1, 1))"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "outputs": [],
   "source": [
    "# 创建时间序列数据集\n",
    "def create_dataset(dataset, time_steps=1, forecast_steps=1):\n",
    "    X, y = [], []\n",
    "    for i in range(len(dataset) - time_steps - forecast_steps + 1):\n",
    "        X.append(dataset[i:i+time_steps, 0])\n",
    "        y.append(dataset[i+time_steps:i+time_steps+forecast_steps, 0])\n",
    "    return np.array(X), np.array(y)"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "outputs": [],
   "source": [
    "time_steps = 14  # 时间步长，即历史数据窗口大小\n",
    "forecast_steps = 7  # 预测步数，即输出的数据点数量\n",
    "X, y = create_dataset(scaled_data, time_steps, forecast_steps)"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "outputs": [],
   "source": [
    "# 创建训练集和测试集\n",
    "train_size = int(len(X) * 0.8)  # 使用80%的数据作为训练集\n",
    "X_train, X_test = X[:train_size, :], X[train_size:, :]\n",
    "y_train, y_test = y[:train_size, :], y[train_size:, :]"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "outputs": [],
   "source": [
    "# 将输入数据重塑为LSTM模型所需的形状（样本数，时间步长，特征数）\n",
    "X_train = np.reshape(X_train, (X_train.shape[0], X_train.shape[1], 1))\n",
    "X_test = np.reshape(X_test, (X_test.shape[0], X_test.shape[1], 1))"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "outputs": [],
   "source": [
    "# 构建LSTM模型\n",
    "model = Sequential()\n",
    "model.add(LSTM(units=50, return_sequences=True, input_shape=(time_steps, 1)))\n",
    "model.add(LSTM(units=50))\n",
    "model.add(Dense(units=forecast_steps))"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "outputs": [],
   "source": [
    "# 编译模型\n",
    "model.compile(loss='mean_squared_error', optimizer='adam')"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/50\n",
      "54/54 [==============================] - 5s 18ms/step - loss: 0.0179\n",
      "Epoch 2/50\n",
      "54/54 [==============================] - 1s 16ms/step - loss: 0.0120\n",
      "Epoch 3/50\n",
      "54/54 [==============================] - 1s 16ms/step - loss: 0.0121\n",
      "Epoch 4/50\n",
      "54/54 [==============================] - 1s 16ms/step - loss: 0.0116\n",
      "Epoch 5/50\n",
      "54/54 [==============================] - 1s 17ms/step - loss: 0.0115\n",
      "Epoch 6/50\n",
      "54/54 [==============================] - 1s 15ms/step - loss: 0.0116\n",
      "Epoch 7/50\n",
      "54/54 [==============================] - 1s 16ms/step - loss: 0.0115\n",
      "Epoch 8/50\n",
      "54/54 [==============================] - 1s 16ms/step - loss: 0.0114\n",
      "Epoch 9/50\n",
      "54/54 [==============================] - 1s 16ms/step - loss: 0.0114\n",
      "Epoch 10/50\n",
      "54/54 [==============================] - 1s 15ms/step - loss: 0.0115\n",
      "Epoch 11/50\n",
      "54/54 [==============================] - 1s 15ms/step - loss: 0.0114\n",
      "Epoch 12/50\n",
      "54/54 [==============================] - 1s 15ms/step - loss: 0.0115\n",
      "Epoch 13/50\n",
      "54/54 [==============================] - 1s 15ms/step - loss: 0.0113\n",
      "Epoch 14/50\n",
      "54/54 [==============================] - 1s 16ms/step - loss: 0.0112\n",
      "Epoch 15/50\n",
      "54/54 [==============================] - 1s 16ms/step - loss: 0.0112\n",
      "Epoch 16/50\n",
      "54/54 [==============================] - 1s 15ms/step - loss: 0.0112\n",
      "Epoch 17/50\n",
      "54/54 [==============================] - 1s 15ms/step - loss: 0.0113\n",
      "Epoch 18/50\n",
      "54/54 [==============================] - 1s 15ms/step - loss: 0.0113\n",
      "Epoch 19/50\n",
      "54/54 [==============================] - 1s 15ms/step - loss: 0.0112\n",
      "Epoch 20/50\n",
      "54/54 [==============================] - 1s 15ms/step - loss: 0.0110\n",
      "Epoch 21/50\n",
      "54/54 [==============================] - 1s 15ms/step - loss: 0.0111\n",
      "Epoch 22/50\n",
      "54/54 [==============================] - 1s 15ms/step - loss: 0.0110\n",
      "Epoch 23/50\n",
      "54/54 [==============================] - 1s 15ms/step - loss: 0.0109\n",
      "Epoch 24/50\n",
      "54/54 [==============================] - 1s 15ms/step - loss: 0.0108\n",
      "Epoch 25/50\n",
      "54/54 [==============================] - 1s 15ms/step - loss: 0.0110\n",
      "Epoch 26/50\n",
      "54/54 [==============================] - 1s 15ms/step - loss: 0.0109\n",
      "Epoch 27/50\n",
      "54/54 [==============================] - 1s 15ms/step - loss: 0.0107\n",
      "Epoch 28/50\n",
      "54/54 [==============================] - 1s 15ms/step - loss: 0.0107\n",
      "Epoch 29/50\n",
      "54/54 [==============================] - 1s 15ms/step - loss: 0.0107\n",
      "Epoch 30/50\n",
      "54/54 [==============================] - 1s 15ms/step - loss: 0.0107\n",
      "Epoch 31/50\n",
      "54/54 [==============================] - 1s 14ms/step - loss: 0.0106\n",
      "Epoch 32/50\n",
      "54/54 [==============================] - 1s 15ms/step - loss: 0.0107\n",
      "Epoch 33/50\n",
      "54/54 [==============================] - 1s 15ms/step - loss: 0.0106\n",
      "Epoch 34/50\n",
      "54/54 [==============================] - 1s 15ms/step - loss: 0.0105\n",
      "Epoch 35/50\n",
      "54/54 [==============================] - 1s 16ms/step - loss: 0.0105\n",
      "Epoch 36/50\n",
      "54/54 [==============================] - 1s 15ms/step - loss: 0.0105\n",
      "Epoch 37/50\n",
      "54/54 [==============================] - 1s 15ms/step - loss: 0.0104\n",
      "Epoch 38/50\n",
      "54/54 [==============================] - 1s 15ms/step - loss: 0.0103\n",
      "Epoch 39/50\n",
      "54/54 [==============================] - 1s 16ms/step - loss: 0.0102\n",
      "Epoch 40/50\n",
      "54/54 [==============================] - 1s 16ms/step - loss: 0.0101\n",
      "Epoch 41/50\n",
      "54/54 [==============================] - 1s 15ms/step - loss: 0.0100\n",
      "Epoch 42/50\n",
      "54/54 [==============================] - 1s 15ms/step - loss: 0.0101\n",
      "Epoch 43/50\n",
      "54/54 [==============================] - 1s 15ms/step - loss: 0.0101\n",
      "Epoch 44/50\n",
      "54/54 [==============================] - 1s 15ms/step - loss: 0.0100\n",
      "Epoch 45/50\n",
      "54/54 [==============================] - 1s 15ms/step - loss: 0.0099\n",
      "Epoch 46/50\n",
      "54/54 [==============================] - 1s 15ms/step - loss: 0.0099\n",
      "Epoch 47/50\n",
      "54/54 [==============================] - 1s 15ms/step - loss: 0.0099\n",
      "Epoch 48/50\n",
      "54/54 [==============================] - 1s 15ms/step - loss: 0.0098\n",
      "Epoch 49/50\n",
      "54/54 [==============================] - 1s 15ms/step - loss: 0.0098\n",
      "Epoch 50/50\n",
      "54/54 [==============================] - 1s 15ms/step - loss: 0.0098\n"
     ]
    },
    {
     "data": {
      "text/plain": "<keras.callbacks.History at 0x1f6bdb49550>"
     },
     "execution_count": 48,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 训练模型\n",
    "model.fit(X_train, y_train, epochs=50, batch_size=16, verbose=1)"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "27/27 [==============================] - 1s 10ms/step\n",
      "7/7 [==============================] - 0s 8ms/step\n"
     ]
    }
   ],
   "source": [
    "# 在训练集和测试集上进行预测\n",
    "train_predict = model.predict(X_train)\n",
    "test_predict = model.predict(X_test)"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "outputs": [],
   "source": [
    "# 将预测结果反归一化\n",
    "train_predict = scaler.inverse_transform(train_predict.reshape(-1, forecast_steps))\n",
    "y_train = scaler.inverse_transform(y_train.reshape(-1, forecast_steps))\n",
    "test_predict = scaler.inverse_transform(test_predict.reshape(-1, forecast_steps))\n",
    "y_test = scaler.inverse_transform(y_test.reshape(-1, forecast_steps))"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "outputs": [],
   "source": [
    "# 计算训练集和测试集上的均方根误差（RMSE）\n",
    "train_rmse = np.sqrt(np.mean(np.square(y_train - train_predict)))\n",
    "test_rmse = np.sqrt(np.mean(np.square(y_test - test_predict)))"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train RMSE: 18.235981836980336\n",
      "Test RMSE: 17.327777897183303\n"
     ]
    }
   ],
   "source": [
    "# 打印均方根误差\n",
    "print(f\"Train RMSE: {train_rmse}\")\n",
    "print(f\"Test RMSE: {test_rmse}\")"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "outputs": [],
   "source": [
    "fin_x = series[-14:]\n",
    "fin_x = scaler.transform(fin_x.reshape(-1,1))\n",
    "fin_x = fin_x.reshape(-1,14,1)\n",
    "fin_y = model.predict(fin_x)\n",
    "fin_y = scaler.inverse_transform(fin_y)"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "outputs": [
    {
     "data": {
      "text/plain": "array([[21.77101 , 17.905207, 16.240042, 16.468573, 18.015272, 19.295685,\n        20.434072]], dtype=float32)"
     },
     "execution_count": 59,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "fin_y"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 93,
   "outputs": [],
   "source": [
    "# 写入文本文件\n",
    "with open('output.txt', 'a') as file:\n",
    "    file.write(column_names[index] + '\\n')\n",
    "    file.write(np.array2string(fin_y))"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "outputs": [],
   "source": [],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}